Merged from gtk-2-4:
authorFederico Mena Quintero <federico@ximian.com>
Sat, 20 Nov 2004 04:52:57 +0000 (04:52 +0000)
committerFederico Mena Quintero <federico@src.gnome.org>
Sat, 20 Nov 2004 04:52:57 +0000 (04:52 +0000)
2004-11-19  Federico Mena Quintero  <federico@ximian.com>

Merged from gtk-2-4:

Fix #158475:

* gtk/gtkpathbar.c (make_directory_button): Make the button a drag
source.
(button_drag_data_get_cb): New callback to let us drag the
button's path as a text/uri-list.

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtkpathbar.c

index 9356db4a8abbe6691020494ea0a7fa148f2927f4..db8c867512381fe00f2fad11a07dd79d5c986d25 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2004-11-19  Federico Mena Quintero  <federico@ximian.com>
+
+       Merged from gtk-2-4:
+
+       Fix #158475:
+
+       * gtk/gtkpathbar.c (make_directory_button): Make the button a drag
+       source.
+       (button_drag_data_get_cb): New callback to let us drag the
+       button's path as a text/uri-list.
+
 2004-11-19  Federico Mena Quintero  <federico@ximian.com>
 
        Merged from gtk-2-4:
index 9356db4a8abbe6691020494ea0a7fa148f2927f4..db8c867512381fe00f2fad11a07dd79d5c986d25 100644 (file)
@@ -1,3 +1,14 @@
+2004-11-19  Federico Mena Quintero  <federico@ximian.com>
+
+       Merged from gtk-2-4:
+
+       Fix #158475:
+
+       * gtk/gtkpathbar.c (make_directory_button): Make the button a drag
+       source.
+       (button_drag_data_get_cb): New callback to let us drag the
+       button's path as a text/uri-list.
+
 2004-11-19  Federico Mena Quintero  <federico@ximian.com>
 
        Merged from gtk-2-4:
index 9356db4a8abbe6691020494ea0a7fa148f2927f4..db8c867512381fe00f2fad11a07dd79d5c986d25 100644 (file)
@@ -1,3 +1,14 @@
+2004-11-19  Federico Mena Quintero  <federico@ximian.com>
+
+       Merged from gtk-2-4:
+
+       Fix #158475:
+
+       * gtk/gtkpathbar.c (make_directory_button): Make the button a drag
+       source.
+       (button_drag_data_get_cb): New callback to let us drag the
+       button's path as a text/uri-list.
+
 2004-11-19  Federico Mena Quintero  <federico@ximian.com>
 
        Merged from gtk-2-4:
index 9356db4a8abbe6691020494ea0a7fa148f2927f4..db8c867512381fe00f2fad11a07dd79d5c986d25 100644 (file)
@@ -1,3 +1,14 @@
+2004-11-19  Federico Mena Quintero  <federico@ximian.com>
+
+       Merged from gtk-2-4:
+
+       Fix #158475:
+
+       * gtk/gtkpathbar.c (make_directory_button): Make the button a drag
+       source.
+       (button_drag_data_get_cb): New callback to let us drag the
+       button's path as a text/uri-list.
+
 2004-11-19  Federico Mena Quintero  <federico@ximian.com>
 
        Merged from gtk-2-4:
index 8ebbf9c754a80745ad0479dc49d42df5e2d99177..fdc29b391fe8a17a96a9233c6e7df9aafefb72ed 100644 (file)
@@ -24,6 +24,7 @@
 #include "gtktogglebutton.h"
 #include "gtkalignment.h"
 #include "gtkarrow.h"
+#include "gtkdnd.h"
 #include "gtkimage.h"
 #include "gtkintl.h"
 #include "gtkicontheme.h"
@@ -1067,6 +1068,34 @@ find_button_type (GtkPathBar  *path_bar,
  return NORMAL_BUTTON;
 }
 
+static void
+button_drag_data_get_cb (GtkWidget          *widget,
+                        GdkDragContext     *context,
+                        GtkSelectionData   *selection_data,
+                        guint               info,
+                        guint               time_,
+                        gpointer            data)
+{
+  ButtonData *button_data;
+  GtkPathBar *path_bar;
+  char *uri;
+  char *uri_list;
+
+  button_data = data;
+  path_bar = GTK_PATH_BAR (widget->parent); /* the button's parent *is* the path bar */
+
+  uri = gtk_file_system_path_to_uri (path_bar->file_system, button_data->path);
+  uri_list = g_strconcat (uri, "\r\n", NULL);
+  g_free (uri);
+
+  gtk_selection_data_set (selection_data,
+                         selection_data->target,
+                         8,
+                         uri_list,
+                         strlen (uri_list));
+  g_free (uri_list);
+}
+
 static ButtonData *
 make_directory_button (GtkPathBar  *path_bar,
                       const char  *dir_name,
@@ -1074,6 +1103,10 @@ make_directory_button (GtkPathBar  *path_bar,
                       gboolean     current_dir,
                       gboolean     file_is_hidden)
 {
+  const GtkTargetEntry targets[] = {
+    { "text/uri-list", 0, 0 }
+  };
+
   GtkWidget *child = NULL;
   GtkWidget *label_alignment = NULL;
   ButtonData *button_data;
@@ -1134,6 +1167,14 @@ make_directory_button (GtkPathBar  *path_bar,
   g_object_weak_ref (G_OBJECT (button_data->button),
                     (GWeakNotify) button_data_free, button_data);
 
+  gtk_drag_source_set (button_data->button,
+                      GDK_BUTTON1_MASK,
+                      targets,
+                      G_N_ELEMENTS (targets),
+                      GDK_ACTION_COPY);
+  g_signal_connect (button_data->button, "drag-data-get",
+                   G_CALLBACK (button_drag_data_get_cb), button_data);
+
   return button_data;
 }